home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / formats / iff / newiff.lzh / NewIFF / NewIFF.lzh / newiff / apps / ILBMtoC / ILBMtoC.c < prev   
C/C++ Source or Header  |  1992-05-18  |  4KB  |  159 lines

  1. /*--------------------------------------------------------------*/
  2. /*                                */
  3. /* ILBMtoC: reads in ILBM, prints out ascii representation,     */
  4. /*  for including in C files.                     */
  5. /*                                                              */
  6. /* Based on ILBMDump.c by Jerry Morrison and Steve Shaw,    */
  7. /* Electronic Arts.                               */
  8. /* Jan 31, 1986                            */
  9. /*                                                              */
  10. /* This software is in the public domain.                       */
  11. /* This version for the Commodore-Amiga computer.               */
  12. /*                                                              */
  13. /*  Callable from CLI ONLY                    */
  14. /*  modified 05-91 for use wuth iffparse modules        */
  15. /*  Requires linkage with several other modules - see Makefile  */
  16. /*--------------------------------------------------------------*/
  17. #define INTUI_V36_NAMES_ONLY
  18.  
  19. #include "iffp/ilbmapp.h"
  20.  
  21. #ifdef LATTICE
  22. int CXBRK(void) { return(0); }  /* Disable Lattice CTRL/C handling */
  23. int chkabort(void) { return(0); }  /* really */
  24. #endif
  25.  
  26. char *vers = "$VER: ILBMtoC 37.9";
  27. char *Copyright = "ILBMtoC v37.9 (Freely Redistributable)";
  28.  
  29. void GetSuffix(UBYTE *to, UBYTE *fr);
  30. void bye(UBYTE *s, int e);
  31. void cleanup(void);
  32.  
  33. struct Library *IFFParseBase = NULL;
  34. struct Library *GfxBase = NULL;
  35.  
  36. /* ILBM frame */
  37. struct ILBMInfo ilbm = {0};
  38.  
  39.  
  40. /* ILBM Property chunks to be grabbed - only BMHD needed for this app
  41.  */
  42. LONG    ilbmprops[] = {
  43.         ID_ILBM, ID_BMHD,
  44.         TAG_DONE
  45.         };
  46.  
  47. /* ILBM Collection chunks (more than one in file) to be gathered */
  48. LONG    *ilbmcollects = NULL;    /* none needed for this app */
  49.  
  50. /* ILBM Chunk to stop on */
  51. LONG    ilbmstops[] = {
  52.         ID_ILBM, ID_BODY,
  53.         TAG_DONE
  54.         };
  55.  
  56.  
  57. UBYTE defSwitch[] = "b";
  58.  
  59. /** main() ******************************************************************/
  60.  
  61. void main(int argc, char **argv)
  62.     {
  63.     UBYTE *sw;
  64.     FILE *fp;
  65.     LONG error=NULL;
  66.     UBYTE *ilbmname, name[80], fname[80];
  67.  
  68.     if ((argc < 2)||(argv[argc-1][0]=='?'))
  69.     {
  70.     printf("Usage from CLI: 'ILBMtoC filename switch-string'\n");
  71.     printf(" where switch-string = \n");
  72.     printf("  <nothing> : Bob format (default)\n");
  73.     printf("  s         : Sprite format (with header and trailer words)\n");
  74.     printf("  sn        : Sprite format (No header and trailer words)\n");
  75.     printf("  a         : Attached sprite (with header and trailer)\n");
  76.     printf("  an        : Attached sprite (No header and trailer)\n");
  77.     printf(" Add 'c' to switch list to output CR's with LF's   \n");
  78.     exit(RETURN_OK);
  79.     }
  80.     
  81.  
  82.     if(!(GfxBase = OpenLibrary("graphics.library",0)))
  83.     bye("Can't open graphics.library",RETURN_FAIL);
  84.  
  85.     if(!(IFFParseBase = OpenLibrary("iffparse.library",0)))
  86.     bye("Can't open iffparse.library",RETURN_FAIL);
  87.  
  88. /*
  89.  * Here we set up default ILBMInfo fields for our
  90.  * application's frames.
  91.  * Above we have defined the propery and collection chunks
  92.  * we are interested in (some required like BMHD)
  93.  */
  94.     ilbm.ParseInfo.propchks      = ilbmprops;
  95.     ilbm.ParseInfo.collectchks   = ilbmcollects;
  96.     ilbm.ParseInfo.stopchks      = ilbmstops;
  97.     if(!(ilbm.ParseInfo.iff = AllocIFF()))
  98.         bye(IFFerr(IFFERR_NOMEM),RETURN_FAIL);    /* Alloc an IFFHandle */
  99.  
  100.     sw = (argc>2) ? (UBYTE *)argv[2] : defSwitch;
  101.     ilbmname = argv[1];
  102.  
  103.     if (error = loadbrush(&ilbm,ilbmname))
  104.         {
  105.         printf("Can't load ilbm \"%s\", ifferr=%s\n",ilbmname,IFFerr(error));
  106.         bye("",RETURN_WARN);
  107.         }
  108.     else /* Successfully loaded ILBM */
  109.     {
  110.     printf(" Creating file %s.c \n",argv[1]);
  111.     GetSuffix(name,argv[1]);
  112.     strcpy(fname,argv[1]);
  113.     strcat(fname,".c");
  114.     fp = fopen(fname,"w");
  115.     if(fp)
  116.         {
  117.         BMPrintCRep(ilbm.brbitmap,fp,name,sw);
  118.         fclose(fp);
  119.         }
  120.     else  printf("Couldn't open output file: %s. \n", fname);
  121.     unloadbrush(&ilbm);
  122.     }
  123.     printf("\n");
  124.     bye("",RETURN_OK);
  125.     }
  126.  
  127.  
  128.  
  129. /* this copies part of string after the last '/' or ':' */
  130. void GetSuffix(to, fr) UBYTE *to, *fr; {
  131.     int i;
  132.     UBYTE c,*s = fr;
  133.     for (i=0; ;i++) {
  134.     c = *s++;
  135.     if (c == 0) break;
  136.     if (c == '/') fr = s;
  137.     else if (c == ':') fr = s;
  138.     }
  139.     strcpy(to,fr);
  140.     }
  141.  
  142.  
  143. void bye(UBYTE *s, int e)
  144.     {
  145.     if(s&&(*s))    printf("%s\n",s);
  146.     cleanup();
  147.     exit(e);
  148.     }
  149.  
  150.  
  151. void cleanup()
  152.     {
  153.     if(ilbm.ParseInfo.iff)        FreeIFF(ilbm.ParseInfo.iff);
  154.  
  155.     if(IFFParseBase)    CloseLibrary(IFFParseBase);
  156.     if(GfxBase)        CloseLibrary(GfxBase);
  157.     }
  158.  
  159.